opencv imread函数详解 您所在的位置:网站首页 imread函数 python opencv imread函数详解

opencv imread函数详解

#opencv imread函数详解| 来源: 网络整理| 查看: 265

本文章采用版本为opencv4.60,visual studio 2022版本。

imread函数官网源代码解释://C++版本 Mat cv::imread ( const String & filename, int flags = IMREAD_COLOR ) //python 版本 cv.imread(filename[, flags]) ->retval

opencv官网提供了函数的源代码,虽然是英文版的,英文不差的同学可以直接去官网看。

OpenCV: Image file reading and writing

以下是我对官网源代码的翻译和搬运,已经看过的可以点点目录直接跳到后面的理解上。

把一个文件图片加载出来,函数imread从指定的文件中加载一个图像并返回,如果图像不能被读取(因为文件丢失、权限不够、不支持或无效的格式),该函数返回一个空矩阵Mat::data==NULL。

目前,支持的文件格式如下:

始终支持的:

Windows位图 :*.bmp, *.dib, Sun rasters:*.sr, *.ras。 Radiance HDR: *.hdr, *.pic 。 Portable image format - *.pbm, *.pgm, *.ppm *.pxm, *.pnm

根据注释来变化的支持:

JPEG files - *.jpeg, *.jpg, *.jpe (see the Note section)JPEG 2000 files - *.jpPortable Network Graphics - *.pngWebP - *.webpPFM files - *.pfmTIFF files - *.tiff, *.tif OpenEXR Image files - *.exr Raster and Vector geospatial data supported by GDAL 小提示:小提示我会在后面个人理解里详细解释

该函数通过内容而不是文件扩展名来确定图像的类型。(这句话后面我会解释)

在彩色图像的情况下,解码后的图像将以B G R的顺序存储通道。

当使用IMREAD_GRAYSCALE时,将使用编解码器的内部灰度转换。结果可能与cvtColor()的输出不同

在微软Windows*操作系统和MacOSX*上,默认使用OpenCV图像的编解码器(libjpeg, libpng, libtiff, 和libjasper)。因此,OpenCV总是可以读取JPEG、PNG和TIFF。在MacOSX上,也有一个选项可以使用本地的MacOSX图像阅读器。但要注意的是,由于MacOSX中嵌入了色彩管理,目前这些本地图像加载器给出的图像的像素值是不同的。(我本人没有mac,所以不了解mac的情况)

在Linux*、BSD风格和其他类unix的开源操作系统上,OpenCV寻找与操作系统映像一起提供的编解码器。安装相关的软件包(不要忘记开发文件,例如,“libjpeg-dev”,在Debian*和Ubuntu*)以获得编解码器支持或打开CMake中的OPENCV_BUILD_3RDPARTY_LIBS标志

假如你在CMake中把WITH_GDAL设置为 "true",并且用IMREAD_LOAD_GDAL加载图像,那么opencv将使用GDAL驱动来解码图像,支持以下格式。栅格、矢量

如果图像文件中嵌入了EXIF信息,则会考虑EXIF方向,因此图像将相应地旋转,除非传入了标志IMREAD_IGNORE_ORIENTATION或IMREAD_UNCHANGED。(Exif 信息是镶嵌在 JPEG/TIFF 图像文件格式内的一组拍摄参数,需要注意的是 EXIF 信息是不支持 png,webp 等图片格式的,包含了图片旋转信息

IMREAD_IGNORE_ORIENTATION 如果设置,不根据EXIF的方向标志旋转图像。

IMREAD_UNCHANGED如果设置了,则按原样返回加载的图像(带alpha通道,否则会被裁剪)。忽略EXIF方向。)

使用IMREAD_UNCHANGED标志来保持PFM图像的浮点值。(不理解)

默认情况下,像素数必须小于2^30。可以使用系统变量OPENCV_IO_MAX_IMAGE_PIXELS来设置限制。

(不理解,希望能指教)

个人理解:该函数通过内容而不是文件扩展名来确定图像的类型的理解:图形通过文件拓展名判断:jpg和zip都是文件的后缀,根据文件名获取后缀并通过后缀判断文件格式。同样,使用者修改后缀会导致误判格式的错误发生。

2.通过内容判断,也就是通过文件头来判断文件

所有的图片文件都包括:文件识别头和图象数据两部分,

其中文件识别头用来让计算机判断是哪种文件格式。

我查看图片一般通过16进制查看方法:

下载editplus:EditPlus - Download Free Trial

右键图片,选择Editplus;

选择编码格式:Hex viewer (16进制查看);

对比文件头,分析出图片真实的格式。

下载submit:Download - Sublime Text

将图片后缀改为txt。

用sublime打开图片文件

JPEG (jpg),文件头:FFD8FF

pNG (png),文件头:89504E47

GIF (gif),文件头:47494638

TIFF (tif),文件头:49492A00

Windows Bitmap (bmp),文件头:424D。

opencv应该也是通过类似的查询文件内容来判断,避免了误判。

在彩色图像的情况下,解码后的图像将以B G R的顺序存储通道。

BGR的存储顺序意味着当你把opencv的图片放到matlab(RGB存储形式)中要记得转换图片。

拆分图片的顺序要按照bgr,而不是rgb。

b=cv2.split(a)[0] g=cv2.split(a)[1] r=cv2.split(a)[2]

剩下的明天继续干



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有